﻿using System;
using System.Data;
using SiGeCoPre.Presupuesto_DAO;
using SiGeCoPre.Presupuesto_DTO;
using SiGeCoPre.Presupuesto_Entities;
using SiGeCoPre.Presupuesto_Factory;
using SiGeCoPre.Presupuesto_Excepcion;
using SiGeCoPre.Presupuesto_Util;

namespace SiGeCoPre.Presupuesto_BLIMPL
{
    /// <summary>
    /// Clase que implementa BLPaises
    /// </summary>
    class BLIMPLPaises:Presupuesto_BL.BLPaises
    {
        DAOPaises createPais = DAOFactoryPresupuesto.createPais();

        /// <summary>
        /// Guarda un país
        /// </summary>
        /// <param name="p">Objeto con los datos del país a guardar</param>
        /// <returns>Devuelve true si fue ingresado correctamente o false si falló</returns>
        public bool savePais(paisesDTO p)
        {
            Boolean correcto = false;

            try
            {
                Boolean insertado = createPais.savePais(p.Nombre, p.Activo);

                if (insertado)
                {
                    correcto = true;
                }
            }
            catch (Exception ex)
            {

                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }
            return correcto;
        }

        /// <summary>
        /// Modifica un país
        /// </summary>
        /// <param name="p">Objeto con los datos del país a modificar</param>
        /// <param name="nombre">Determina el país a modificar</param>
        /// <returns>Devuelve true si fue modificado correctamente o false si falló</returns>
        public bool updatePais(paisesDTO p, string nombre)
        {
            Boolean correcto = false;

            try
            {
                paises pa = createPais.getPais(nombre);

                if (null != pa)
                {
                    Boolean modificado = createPais.updatePais(p.Nombre, p.Activo, pa.ID);

                    if (modificado)
                    {
                        correcto = true;
                    }
                }
                
            }
            catch (Exception ex)
            {
                
                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }
            return correcto;
        }

        /// <summary>
        /// Elimina un país
        /// </summary>
        /// <param name="nombre">Determina el país a eliminar</param>
        /// <returns>Devuelve true si fue eliminado correctamente o false si falló</returns>
        public bool deletePais(string nombre)
        {
            Boolean correcto = false;

            try
            {
                Boolean eliminado = createPais.deletePais(nombre);

                if (eliminado)
                {
                    correcto = true;
                }
            }
            catch (Exception ex)
            {

                correcto = false;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return correcto;
        }

        /// <summary>
        /// Lista los paises
        /// </summary>
        /// <returns>Devuelve una tabla con los paises</returns>
        public DataTable getAllPais()
        {
            DataTable listadoPaises = null;

            try
            {
                DataTable paises = createPais.getAllPais();

                if (null != paises)
                {
                    listadoPaises = paises;
                }
            }
            catch (Exception ex)
            {

                listadoPaises = null;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return listadoPaises;
        }

        /// <summary>
        /// Obtiene un país
        /// </summary>
        /// <param name="nombre">Determina el país a obtener</param>
        /// <returns>Devuelve un objeto pais</returns>
        public paisesDTO getPais(string nombre)
        {
            paisesDTO pais = null;

            try
            {
                paises p = createPais.getPais(nombre);

                if (null != p)
                {
                    pais = new paisesDTO();
                    pais.Activo = p.Activo;
                    pais.ID = p.ID;
                    pais.Nombre = p.Nombre;
                }
            }
            catch (Exception ex)
            {

                pais = null;
                Texto.escribirLog(ex.Message);
                throw new BLException(ex.Message);
            }

            return pais;
        }
    }
}
